#include <iostream>
#include <cstring>
using namespace std;

class Animal
{
public:
	Animal(int newage,const char *newname)
	{
		cout<<"构造函数"<<endl;
		age=newage;
		//给指针name分配堆空间
		name=new char[20];
		strcpy(name,newname);
	}

	void show()
	{
		cout<<"age :  "<<age<<"name  :  "<<name<<endl;
		cout<<"&age :  "<<&age<<endl;
		cout<<"name 地址:  "<<(int *)name<<endl;
		
	}
	void setAge(int newage)
	{
		age=newage;
	}
	void setName(const char *newname)
	{
		strcpy(name,newname);
	}
	//析构函数
	~Animal()
	{
		cout<<"对象被析构了"<<endl;
		//释放name的堆空间
		delete []name;  //由于你使用的是默认拷贝构造函数(浅拷贝),name是共用的，析构多次会出现段错误
	}
private:
	int age;
	char *name;  
};

int main()
{
	Animal a(18,"xiaohuang");
	Animal b=a;  //把对象a赋值给一个新的对象b，调用的是系统默认拷贝构造函数
	Animal c=a;
	
	cout<<"a b c三个都是独立的对象，地址不一样:  "<<&a<<"   "<<&b<<"   "<<&c<<endl;
	a.show();
	b.show();
	c.show();
	//b对象打算修改自己的年龄和自己的名字
	b.setAge(8);
	b.setName("wangcai");
	a.show();
	b.show();
	c.show();
}